<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\AdminRoleRequest;
use App\Models\AdminModule;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $roles = Role::paginate(4);
       return view('admin.role_index',compact('roles'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.role_create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    //这里用到类型约束
    public function store(AdminRoleRequest $request)
    {
        Role::create($request->all());
        //用下面这种方式,直接渲染index页面,虽然也能出效果显示角色列表页,但是这样做有很多不好的地方
        //首先:如果前面渲染index方法的时候传递了参数,那这里也必须一模一样传递相同的参数
        //其次一个缺点是,如果在这里渲染首页,但是当前页面的缓存中还存放这之前表单中的数据,所以如果这个时候刷新页面的话将会
        //再次提交form表单中的数据,这是不行的.所以必须要要用redirect重定向的方式渲染首页
//        return view('admin.role_index',['roles'=>Role::paginate(2)])->with('success','角色添加成功');
        return redirect(route('admin.role.index'))->with('success','角色创建成功');

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit(Role  $role)
    {
        return view('admin.role_edit',compact('role'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(AdminRoleRequest $request, Role $role)
    {
//        调用Role角色模型对象的update方法,将经过request请求验证的表单提交过来的数据更新的数据表中
        $role->update($request->all());
        return redirect(route('admin.role.index'))->with('角色编辑成功');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Role $role)
    {
        //调用相应对象模型的delete()方法删除传递过来的对象
        $role->delete();
        return redirect(route('admin.role.index'))->with('success','角色删除成功');
    }

    //角色------权限设置
    public function editpermision(Role $role){
        //渲染模板,由于会传递过来要编辑哪个角色的权限
//        各个模块儿的权限都在AdminModule表中,所以将AdminModule表中的内容也传递到页面中
        $modules = AdminModule::get();
      return  view('admin.role_permission',compact('role','modules'));
    }

    public function updatepermission(Request $request ,Role $role){
        //无论什么样的http动作,input方法都可以用来获取用户输入的数据
        dd($request->input('permission'));
        //通过前台表单提交的数据可以获取到为当前角色分配的权限信息,然后调用相关方法,给角色分配权限
        $role->syncPermissions($request->input('permission'));
        //上面的命令执行完成后说明已经将权限都分配到相应的角色中了
        return redirect(route('admin.role.index'))->with('success','给角色分配权限成功');
    }
}
